#ifndef AUDIO_PLAYER_H
#define AUDIO_PLAYER_H
#include <SDL2/SDL_mixer.h>

extern Mix_Music *playing_music;

/**
 * 当前值设置音量
 * @param value 音量比例数值，value需确保范围在0-100，slider默认取值范围是：最小值0～最大值100
 * @return void
 */
void config_volume_with_value(int value);

/**
 * 设置音量
 * @param percent 音量比例
 * @return void
 */
void config_volume(float volume_percent_value);

/**
 * 播放器是否无音乐，当播放结束时音乐被释放此时playing_music为NULL则为true
 * @param void
 * @return _Bool 是否无音乐
 */
_Bool is_empty_player();

/**
 * 停止播放mp3
 * @param void
 * @return void
 */
void stopPlayingMusic();
/**
 * 暂停当前正在播放的音乐
 * @param void
 * @return void
 */
void pausePlayingMusic();
/**
 * 恢复继续播放
 * @param void
 * @return void
 */
void resumePlayingMusic();
/**
 * 把播放位置重置到开头（重新从头播放）
 * @param void
 * @return void
 */
void rewindPlayingMusic();


/**
 * 是否正在播放mp3
 * @param void
 * @return _Bool 是否正在播放mp3
 */
_Bool isPlayingMusic();
/**
 * 是否出于暂停播放状态
 * @param void
 * @return _Bool 是否出于暂停播放状态
 */
_Bool isPausedMusic();
/**
 * 若为暂停播放状态则继续播放，若为正在播放状态则暂停播放，其他状态不做处理
 * @param void
 * @return void
 */
void togglePlayStatusMusic();

/**
 * 单次播放mp3
 * @param path	mp3文件路径，例如"assets/audio/SmileThree.mp3"
 * @return void
 */
void single_play_mp3(const char *path);

/**
 * 带有播放结束回调的单次播放mp3方法
 * @param path	mp3文件路径，例如"assets/audio/SmileThree.mp3"
 * @param music_finished	mp3播放结束回调
 * @return void
 */
void single_play_mp3_with_callback(const char *path,
                                   Mix_MusicFinishedCallback music_finished);

#endif // AUDIO_PLAYER_H
